class Person {
    //构造函数
    constructor(name: string, age: number) {
        this.name = name
        this.age = age
    }
    // name: string = '张三'
    // age: number = 20
    //public 公共的
    //private 私有的  只能在Person类内部使用
    //protected 受保护  属性“run”受保护，只能在类“Person”及其子类中访问
    public name!: string //、 !可以写默认值也可以不写，解决报错 如果类里面没有构造函数,初始化成员变量，name成员变量要加初始值，如果不想给值， 可以用！避免报错
    private age!: number
    private sing(): void {
        console.log('唱');
        this.run()
    }
    protected run(): void {
        this.sing()
        console.log(this.age + '的' + this.name + "" + ' 跑')
    }
}
let person = new Person('李思', 23)
// person.run()//属性“run”受保护，只能在类“Person”及其子类中访问

class Male extends Person {
    constructor(name: string, age: number) {
        super(name, age)
    }
    static num: number = 1//静态成员属性
    ts() {
        this.run()
        // this.sing()//属性“sing”为私有属性，只能在类“Person”中访问。 错误
    }
}
console.log(Male.num);//不需要实例化就可以访问的静态属性
let m = new Male('李思1', 23)
// console.log(m.age);//属性“age”为私有属性，只能在类“Person”中访问
// m.run()//属性“run”受保护，只能在类“Person”及其子类中访问
